package ipc;

import java.util.ArrayList;
import java.util.HashMap;

import logic.add.AADD;

import dd.discrete.ADD;
import dd.discrete.ADDDNode;
import dd.discrete.ADDINode;
import dd.discrete.ADDNode;
import dd.discrete.DD;

public class TestAlign {
	public static void main(String[] args) {
//		ArrayList<String> order = new ArrayList<String>();
//		order.add("X");
//		order.add("Y");
//		order.add("Y'");
//		order.add("X'");
//		
//		ADD context = new ADD(order);
//		
//		HashMap<String, String> primeRemap = new HashMap<String, String>();
//		primeRemap.put("X","X'");
//		primeRemap.put("Y","Y'");
//		
//		int x = context.getVarNode("X", 2.9d, 1.0d);
//		int y = context.getVarNode("Y", 3.5d, 1.5d);
//		
//		int sum = context.applyInt(x, y, DD.ARITH_SUM);
//		context.getGraph(sum).launchViewer();
//		
//		sum = context.remapGIDsInt(sum, primeRemap);
//		context.getGraph(sum).launchViewer();
//		
//		System.out.println(context.verifyOrder(sum));
//		
//		sum = context.align(sum);
//		
//		context.getGraph(sum).launchViewer();
//		System.out.println(context.verifyOrder(sum));
		
		HashMap<String,Integer> hmVar2ID = new HashMap<String, Integer>();
		HashMap<Integer,String> hmID2Var = new HashMap<Integer, String>();
		
		hmVar2ID.put("X", 1);
		hmID2Var.put(1, "X");
		
		
		hmVar2ID.put("Y", 2);
		hmID2Var.put(2, "Y");
		
		hmVar2ID.put("Y'", 3);
		hmID2Var.put(3, "Y'");
		
		hmVar2ID.put("X'", 4);
		hmID2Var.put(4, "X'");
		
		ArrayList order = new ArrayList();
		order.add(1);
		order.add(2);
		order.add(3);
		order.add(4);
		
		HashMap primeRemap = new HashMap();
		primeRemap.put(1, 4);
		primeRemap.put(2, 3);
		
		AADD context = new AADD(order);
		
		int x = context.getVarNode(hmVar2ID.get("X"), 2.9d, 1.0d);
		int y = context.getVarNode(hmVar2ID.get("Y"), 3.5d, 1.5d);
		
		int sum = context.applyInt(x, y, DD.ARITH_SUM);
		context.getGraph(sum, hmID2Var).launchViewer();
		
		sum = context.remapGIDsInt(sum, primeRemap);
		context.getGraph(sum, hmID2Var).launchViewer();
		
		System.out.println(context.verifyOrder(sum));
		
		sum = context.align(sum);
		System.out.println(sum);
		
		context.getGraph(sum, hmID2Var).launchViewer();
		System.out.println(context.verifyOrder(sum));
		
	}

}
